package com.cppddd.util;

import weibo4j.Friendships;
import weibo4j.Oauth;
import weibo4j.Timeline;
import weibo4j.Users;
import weibo4j.Weibo;
import weibo4j.http.ImageItem;
import weibo4j.model.Paging;
import weibo4j.model.Status;
import weibo4j.model.StatusWapper;
import weibo4j.model.User;
import weibo4j.model.UserWapper;
import weibo4j.model.WeiboException;

public class SinaWeiboUtil {
	
	Weibo weibo = new Weibo();
	
	public SinaWeiboUtil(){}
	
	public SinaWeiboUtil(String access_token){
		weibo.setToken(access_token);
	}
	
	public void setAccess_Token(String access_token){
		weibo.setToken(access_token);
	}
	
	
	
	/**
	 * 用户授权地址,获取URL
	 * @return String
	 * @throws WeiboException
	 */
	public String getLoginUrl() throws WeiboException{
		Oauth oauth = new Oauth();
		return oauth.authorize("code");		 
	}
	
	/**
	 * 根据用户ID获取用户信息
	 * @param access_token
	 * @param uid
	 * @return User
	 * @throws WeiboException
	 */
	public User showUserById(String uid) throws WeiboException {		
		return new Users().showUserById(uid);
	}
	
	/**
	 * 根据用户名称获取用户信息
	 * @param screen_name 用户昵称
	 * @return
	 * @throws WeiboException
	 */
	public User showUserByScreenName(String screen_name) throws WeiboException {
		return new Users().showUserByScreenName(screen_name);
	}
	
	/**
	 * 获取当前登录用户及其所关注用户的最新20条微博消息。和用户登录 http://weibo.com 后在“我的首页”中看到的内容相同。
	 * @return
	 * @throws WeiboException
	 */
	public StatusWapper getFriendsTimeline() throws WeiboException {
		return new Timeline().getFriendsTimeline();
	}
	
	public StatusWapper getFriendsTimeline(Paging page) throws WeiboException {
		return new Timeline().getFriendsTimeline(0,0,page);
	}
	
	/**
	 * 获取某个用户最新发表的微博列表通过uid
	 * @return StatusWapper
	 * @throws WeiboException 
	 */
	public StatusWapper getUserTimelineByUid(String uid, Paging page) throws WeiboException{
		return new Timeline().getUserTimelineByUid(uid,page,0,0);
	}
	
	/**
	 * 获取某个用户最新发表的微博列表通过screen_name
	 * @return StatusWapper
	 * @throws WeiboException 
	 */
	public StatusWapper getUserTimelineByName(String screen_name, Paging page) throws WeiboException{
		return new Timeline().getUserTimelineByName(screen_name,page,0,0);
	}
	
	
	/**
	 * 获取当前用户最新转发的微博列表
	 * @param access_token
	 * @param paging
	 * @return StatusWapper
	 * @throws WeiboException 
	 */
	public StatusWapper getUserWeibo(Paging paging) throws WeiboException{
		StatusWapper status = null;				
		Timeline tm = new Timeline();			
		if(paging != null){
			status = tm.getRepostByMe(paging);
		}else{
			status = tm.getRepostByMe();	
		}
		return status;
	}
	
	
	/**
	 * 获取用户的关注列表
	 * @param access_token
	 * @param uid
	 * @return UserWapper
	 * @throws WeiboException
	 */
	public UserWapper getFriendsByID(String uid) throws WeiboException{		
		return new Friendships().getFriendsByID(uid);		
	}
	
	/**
	 * 获取用户的关注列表
	 * @param access_token
	 * @param uid
	 * @return UserWapper
	 * @throws WeiboException
	 */
	public UserWapper getFriendsByID(String uid,Paging page) throws WeiboException{		
		return new Friendships().getFriendsByID(uid,page);		
	}
	
	/**
	 * 获取粉丝列表,根据uid
	 * @param access_token
	 * @param uid
	 * @param count
	 * @param cursor
	 * @return UserWapper
	 * @throws WeiboException
	 */
	public UserWapper getFollowersById(String uid,int count, int cursor) throws WeiboException {		
		return new Friendships().getFollowersById(uid,count, cursor);		
	}
	
	
	/**
	 * 获取用户的活跃粉丝列表
	 * @param access_token
	 * @param uid
	 * @param count
	 * @return UserWapper
	 * @throws WeiboException
	 */
	public UserWapper getFollowersActive(String uid, Integer count) throws WeiboException{		
		return new Friendships().getFollowersActive(uid,count);		
	}
	
	/**
	 * 关注一个用户根据uid
	 * @param access_token
	 * @param uid
	 * @return User
	 * @throws WeiboException
	 */
	public User createFriendshipsById(String uid) throws WeiboException{		
		return new Friendships().createFriendshipsById(uid);		
	}
	
	/**
	 * 关注一个用户根据名字
	 * @param access_token
	 * @param screen_name
	 * @return User
	 * @throws WeiboException
	 */
	public User createFriendshipsByName(String screen_name) throws WeiboException{		
		return new Friendships().createFriendshipsByName(screen_name);		
	}
	
	/**
	 * 取消关注一个用户
	 * @param access_token
	 * @param uid
	 * @return User
	 * @throws WeiboException
	 */
	public User destroyFriendshipsDestroyById(String uid) throws WeiboException{		
		return new Friendships().destroyFriendshipsDestroyById(uid);		
	}
	
	/**
	 * 取消关注一个用户
	 * @param access_token
	 * @param screen_name
	 * @return User
	 * @throws WeiboException
	 */
	public User destroyFriendshipsDestroyByName(String screen_name) throws WeiboException{		
		return new Friendships().destroyFriendshipsDestroyByName(screen_name);		
	}
	
	/**
	 *  转发一条新微博,直接转发,木有评论.
	 * @param access_token
	 * @param id
	 * @return
	 * @throws WeiboException
	 */
	public Status Repost(String id) throws WeiboException {		
		return new Timeline().Repost(id);		
	}
	
	/**
	 *  转发一条新微博
	 * @param access_token
	 * @param id
	 * @param status
	 * @param is_comment
	 * @return Status
	 * @throws WeiboException
	 */
	public Status Repost(String id, String status, Integer is_comment) throws WeiboException{		
		return new Timeline().Repost(id,status,is_comment);	
	}
	
	/**
	 * 根据微博ID删除指定微博
	 * @param access_token
	 * @param id
	 * @return
	 * @throws WeiboException
	 */
	public Status Destroy(String id) throws WeiboException {		
		return new Timeline().Destroy(id);	
	}
	
	/**
	 * 发布一条新微博
	 * @param access_token
	 * @param status 要发布的微博文本内容，必须做URLencode，内容不超过140个汉字
	 * @return
	 * @throws WeiboException
	 */
	public Status UpdateStatus(String status) throws WeiboException{
		return new Timeline().UpdateStatus(status);	
	}
	
	/**
	 * 发布一条新微博
	 * @param access_token
	 * @param status 要发布的微博文本内容，必须做URLencode，内容不超过140个汉字
	 * @param lat 纬度，有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
	 * @param longs 经度，有效范围：-180.0到+180.0，+表示东经，默认为0.0。
	 * @param annotations 元数据，主要是为了方便第三方应用记录一些适合于自己使用的信息，每条微博可以包含一个或者多个元数据，
	 *            必须以json字串的形式提交，字串长度不超过512个字符，具体内容可以自定
	 * @return Status
	 * @throws WeiboException
	 */
	public Status UpdateStatus(String status, Float lat, Float longs,String annotations) throws WeiboException {		
		return new Timeline().UpdateStatus(status,lat,longs,annotations);	
	}
	
	/**
	 * 上传图片并发布一条新微博
	 * @param access_token
	 * @param status 要发布的微博文本内容，必须做URLencode，内容不超过140个汉字
	 * @param item 要上传的图片，仅支持JPEG、GIF、PNG格式，图片大小小于5M。
	 * @return
	 * @throws WeiboException
	 */
	public Status UploadStatus(String status, ImageItem item) throws WeiboException {		
		return new Timeline().UploadStatus(status,item);	
	}
	
	/**
	 * 上传图片并发布一条新微博
	 * @param access_token
	 * @param status 要发布的微博文本内容，必须做URLencode，内容不超过140个汉字
	 * @param item 要上传的图片，仅支持JPEG、GIF、PNG格式，图片大小小于5M。
	 * @param lat 纬度，有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
	 * @param longs 经度，有效范围：-180.0到+180.0，+表示东经，默认为0.0。
	 * @return
	 * @throws WeiboException
	 */
	public Status UploadStatus(String status, ImageItem item, Float lat,Float longs) throws WeiboException {		
		return new Timeline().UploadStatus(status,item,lat,longs);	
	}
	
}
